{
 "cells": [
  {
   "attachments": {
    "b9535e07-6091-48c2-b095-c549fa5e2c71.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAA70AAAH/CAYAAACb0rriAAAgAElEQVR4nOzd/2uT978//rvnc+DAG1x3LePwYi+PeJIKK9uLiIv1hYs7VNBkOsbGq1vi9mLIqViTDUG3tbOtnPPCWk3mHIi2jbRQDtOmVnGMNWsVWljyklmrNGziC9YrlM4NDvRqjP0Drs8PPc9rV5IryZU06TfvNxDb5vryzHU9ry+P59d1qqqqICIiIiIiIlqD/mm5E0BERERERERUKQx6iYiIiIiIaM1i0EtERERERERrFoNeIiIiIiIiWrMY9BIREREREdGaxaCXiIiIiIiI1iwGvURERERERLRmMeglIiIiIiKiNYtBLxEREREREa1ZDHqJiIiIiIhozWLQS0RERERERGsWg14iIiIiIiJasxj0EhERERER0ZrFoJeIiIiIiIjWLAa9REREREREtGYx6CUiIiIiIqI1i0EvERERERERrVkMeomIiIiIiGjNYtBLREREREREaxaDXiIiIiIiIlqzGPQSERERERHRmsWgl4iIiIiIiNYsBr1ERERERES0ZjHoJSIiIiIiojWLQS8RERERERGtWQx6iYiIiIiIaM1i0EtERERERERrFoNeIiIiIiIiWrMY9BIREREREdGaxaCXiIiIiIiI1iwGvURERERERLRm/X///d///d/LnQgionA4jLfeegv/+q//ipdffnm5k7Os/H4/bt++jeeffx5/+MMflnz/4XAY/f392LJlC/7f//t/OZcLBoO4fPkyampqIElSWdOgKAr+8z//E3/4wx+wcePGvMv9x3/8B5555pmK5pvq6mr87//+77Kdk1AoBK/Xi3/5l3/Bv//7v+c9L8uhtbUV169fL1teKOc1kEgkyp4/hW3btkFVVTz33HMV2wcREZWBSkS0AszOzqo2m00FoDocDnVycrJi+3K5XKrH41GHhoYWtR2bzaZ2d3ers7OzZUrZApfLpQLQjkW5t6+qqjo0NKRKkqQGAoGsz2RZVgGoNpst73kQ5wuA6vP5VFmWi06Hw+FQXS6X4X58Pp8KQG1pacm5fn9/v5YGm82m9vf3F50GVVULHmOxD/Fdl5r++pAkadF5t9wkSdKOT3d396K3p78GXC5X1vlxOBxqf39/wfPW39+vSpK0qHM2NDSkRqNRw8/0+cLj8ZS8DyIiqiwGvUS0YkSj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27ZtWS8z+UbPSyaTWlPTVCqV1vf4xIkTuH79elawrCgKDhw4gC+++AKbN2+Gz+fDsWPHtH2IG5SiKFn9JkX69AGhoihoamoq+tiWg/6FS1+osX79esOAXR8MCmK977//XquNNArwzDS9FbVbueiP5cjISN7+eWaJlwt9fj9z5ozWskD/8DHTT08vHo9jYGAAdXV1ptfRv6RcuHBBa5q21CwWCw4cOACv14uRkRGtyazdbsfIyIjWX9Tn8+VN34YNG6AoCh48eICXXnoJ//M//6PV3sZiMbz11lva921oaIDH40FPT09ac9GlkpkXWltbAcCwYCVfyxNRI6u3FPfzl156CePj47BarVldeTLXW8rChKXw97//HR6PR7ufWywWnDx5Em63G5cuXUq7d2WO/zA/P5+zJcX8/HzaOXv8+DFefvllAAvn58KFC4YtTB49eoTOzk74/X5cunQJn376aVqwIp65L7zwQtozJpFIwOFwZM0iIJ4TtLasX78ekiThl19+Mfxcnze+//57ANnXsvj9+++/1/LVxo0bkUwmtaA6k76FWzmcOHFC6/5SzHNSFDRWKm9brVaMj4/n/PyFF14oabuZrTWNlBKI3rlzx3QhGC29py7ojcfjadOOANCmkojFYujq6sL27duz1svXvDnXzUc0Efnggw9MD9iib/727rvvFmyKZ7FY8Oqrr2ZNlVGuJoO3b9/W+q3dunVLuyFfv349bT/60snMm6XX6zWs+RPpFQ+FqamprIApX627KMEX+0ulUlptWWtrK9577z3D/l+ihuSrr77C+fPn8frrrxve4PV/UxQFH374Id55552sm/utW7fw448/pgXO+bS2tuacMqNYu3fvRlVVFSwWizbYk/5GnpkPck0xZSZgL+dDTdSATk1NIRQKLXpaBP33FKXpRt5///2sZmT5XL16FQ6HA7t37zY9lZdozvzJJ5+Ynu6g2HkDI5GIqe/g9XrR19cHj8eTlo6mpiZs27YNsiwXbArndDrTBip7/PixlhfWr1+fdm1brVZs27YNW7ZsQXd397I089fvU7TyyKwtKdSEdnh4OOvFbynu506nUwvU9ce1XMdx3bp12s8ulwvDw8Nwu93ad9GPm1CpZXMxaqZosVgwMDCgNfUUNbobNmxIWy7f8Xnw4EHWvfyZZ57RapI/+uijnNPf2Ww27TmRawwM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xJJBryzLmJyczBuw7t27V5vWCABGR0czxvSaBbCyLGNkZATffvst3n//fTx48EArXFWM1157LeexixcvanPwGmlvb8fly5dNs842mw1erxfnzp1j0EtERERERKRjyaC3t7dXGwtrZiGFn2KxGNLpNHbu3Llk8+KKoojGxkbT9iQSCWzfvh11dXV519PY2IhwOIxEIpFR6IqIiIiIiGgts2TQ63K5lqWa8VIFunr5CmrJsox79+4ZjgE2Wo/P52PAS0REREREpGPJoHepKjPH43FUV1cXNfXQ6Ojokmwzm9rNWpZlzM7OwuFwmFZq7u7uXpY2EBERERERvaosGfTmE4/H8fPPP+c8nl3IKp1Oo7OzE06nEw8ePCi43mLm+FWrSBdLH2zbbDaMjIxolaIFQShpXURERERERGvRmgh6XS4XNm7cCACorq7G5s2bc7o/GwWsxXQrBoDt27fD5XIVXC4YDGLLli0Fl/N4PIaPe71e7N27F263G//5n/9ZVNuIiIiIiIjWsnWKoigrsuF167BCm6YF4P4iIiKi5cbrjVcL9xepVvux8LuVbgARERERERHRcmHQS0RERERERJbFoJeIiIiIiIgsi0EvERERERERWRaDXiIiIiIiIrKsFa3eTERERERERK++1Vy9eUXn6V3NHwxlWu1lyImIiOjVx+uNVwv3F6lWe0KT3ZuJiIiIiIjIshj0EhERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIhoCciyvNJNICIDK1q9eaXE43F8//33uHDhAmw226LXJ0kSKioqch6PRCJIp9NoaGhYku3kEwqFsG3bNtTV1S3rdoiIiIiswOv1orOzM+MaLhQK4Z133kFNTc2C1tnb24vR0VHs2bOn4LKjo6M4fvw4vF7vgrbl9/vhcDhQX1+/7NeZRK+6FZ2ndyVLnPv9fsRiMUxMTBgGrEbi8Th+/vnnjMcmJycxPDxsuJ6qqiqkUincv39/wScjo21mS6fT6OzshCAIePLkybKc+FZ6fxEREZH1vczrjXXr1iEQCKCjo0N7zO12Q5ZlDA4O5lxPxePxgsmFUCiE0dFRDA4OFty+2+3G66+/jlgstqD252urLMsvJRDm9SGpVvuxsCYzvQDw6aefIhwOY2RkBI2NjUW9prq6Gps3b865IwggJ+BNJBKYmJhAT08PHj9+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s9kwMjKiVYoWBGFB7SQiIiKipSPLMm7evFl0wJtOp1FWVrbMrSIivTVRyMrlcqGhoaHgcuvXr0cwGCx5/du3b4fL5Sq4XDAYxJYtWwou5/F4DB/3er24f/8+nE4nvvvuu5LbSURERERL6/bt20UNRVMlk0nO40v0kq1TFEVZkQ2vW4cV2jQtAPcXERERLTdeb7xauL9ItdqPhTWR6SUiIiIiIqK1iUEvERERERERWRaDXiIiIiIiIrIsBr1ERERERERkWQx6iYiIiIiIyLJWtHozERERERERvfpWc/Xm/7dSG17NHwoRERERERFZA7s3ExERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIiIiCyLQS8RERERERFZFoNeIiIiIiIisiwGvURERERERGRZDHqJiIiIiIjIshj0EhERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIiIiCyLQS8RERERERFZFoNeIiIiIiIisiwGvURERERERGRZDHqJiIiIiIjIshj0EhERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIiIiCyLQS8RERERERFZFoNeIiIiIiIisiwGvURERERERGRZDHqJiIiIiIjIshj0EhERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIiIiCyLQS8RERERERFZFoNeIiIiIiIisiwGvURERERERGRZDHqJiIiIiIjIshj0EhERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIiIiCyLQS8RERERERFZFoNeIiIiIiIisiwGvURERERERGRZDHqJiIiIiIjIshj0EhERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIiIiCyLQS8RERERERFZFoNeIiIiIiIisiwGvURERERERGRZDHqJiIiIiIjIshj0EhERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIiIiCyLQS8RERERERFZFoNeIiIiIiIisiwGvURERERERGRZDHqJiIiIiIjIshj0EhERERERkWUx6CUiIiIiIiLLYtBLRERERERElsWgl4iIiIiIiCyLQS8RERERERFZFoNeIiIiIiIisiwGvURERERERGRZDHqJiIiIiIjIshj0EhERERERkWUx6CUi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"
    }
   },
   "cell_type": "markdown",
   "id": "1d383bb3-bb76-4fb1-a0fe-407fd3ab7ac8",
   "metadata": {},
   "source": [
    "![image.png](attachment:b9535e07-6091-48c2-b095-c549fa5e2c71.png)\n",
    "\n",
    "## 一、实验目的\n",
    "\n",
    "本实验课程是计算机、人工智能、软件工程等专业学生的一门专业课程，通过实验，帮助学生更好地掌握数据挖掘与机器学习相关概念、技术、原理、应用等；通过实验提高学生编写实验报告、总结实验结果的能力；使学生对机器学习模型、算法等有比较深入的认识。要掌握的知识点如下：\n",
    "\n",
    "1. 掌握机器学习中涉及的相关概念、模型、算法；\n",
    "2. 熟悉机器学习模型训练、验证、测试的流程；\n",
    "3. 熟悉常用的数据预处理方法；\n",
    "4. 掌握决策树、随机森林的表示、求解及编程。\n",
    "\n",
    "## 二、基本要求\n",
    "\n",
    "1. 实验前，复习《数据挖掘与机器学习》课程中的有关内容。\n",
    "2. 准备好实验数据，编程完成实验内容，收集实验结果。\n",
    "3. 独立完成实验报告。\n",
    "\n",
    "## 三、实验软件\n",
    "\n",
    "推荐使用Python编程语言（允许使用numpy库，需实现详细实验步骤，不允许直接调用scikit-learn中回归、分类等高层API）。\n",
    "\n",
    "## 四、实验内容：\n",
    "\n",
    "基于Adult数据集，完成关于收入是否大于50K的贪心决策树分类、随机森林分类模型训练、测试与评估。\n",
    "\n",
    "1. 准备数据集并认识数据\n",
    "\n",
    "    下载Adult数据集\n",
    "\n",
    "    http://archive.ics.uci.edu/ml/datasets/Adult\n",
    "\n",
    "    了解数据集各个维度特征及预测值的含义\n",
    "2. 探索数据并预处理数据\n",
    "\n",
    "    观察数据集各个维度特征及预测值的数值类型与分布\n",
    "\n",
    "    预处理各维度特征，参考：https://blog.csdn.net/SanyHo/article/details/105304292\n",
    "\n",
    "3. 训练模型\n",
    "\n",
    "    编程实现训练数据集上贪心决策树、随机森林的构建\n",
    "\n",
    "4. 测试和评估模型\n",
    "\n",
    "    在测试数据集上计算所训练模型的准确率、AUC等指标\n",
    "    \n",
    "## 五、学生实验报告要求\n",
    "\n",
    "实验报告需要包含以下几个部分\n",
    "\n",
    "（1）简要介绍贪心决策树、随机森林分类的原理\n",
    "\n",
    "（2）程序清单（包含详细求解步骤）\n",
    "\n",
    "（3）展示实验结果，\n",
    "\n",
    "（4）讨论实验结果，分析贪心决策树、随机森林分类的优劣\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05d15a40-99f8-4129-808e-ceb0e53aff4f",
   "metadata": {},
   "source": [
    "### 决策树\n",
    "决策树是可以做分类也可以做回归的，主要学习的是分类决策树。决策树模型呈树形结构，在分类问题中，表示基于特征对实例进行分类的过程。可以认为是if-then规则的集合，也可以认为是定义在特征空间与类空间上的条件概率分布。\n",
    "\n",
    "主要优点是模型具有可读性，解释性强，分类速度快。\n",
    "\n",
    "本质上是从训练数据集中归纳出一组分类规则。学习算法通常是一个递归得选择最优特征，并根据该特征对训练数据进行分割，使得对各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分，也对应着决策树的构建。一开始所有训练数据都处于根结点，选择一个最优的特征，按照这一特征将训练集进行划分成子集，使得各个子集在当前条件下最好的分类。如果子集能够被基本正确分类，那就构建叶结点；不能就在子集中继续选取最优特征，继续分割，看不能不能构建叶结点，不能就继续割。。。直到训练集都被分割到叶结点中或者没有合适的特征可以作为划分依据为止。这就生成了一颗决策树。\n",
    "\n",
    "CART算法由两步组成：\n",
    "\n",
    "1. 决策树生成：基于训练集生成决策树，生成的决策树要尽量大\n",
    "2. 决策树剪枝：用验证数据集对已生成的树进行剪枝并选择最优子树，这时用损失函数最小作为剪枝的标准\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "c709abbf-831f-4edb-bc26-a25f250b179d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "28d6e945-ed4e-4eb7-bbf9-20d1118d97b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "def read_adult_data(path: str = \"data/adult.data\"):\n",
    "    data = pd.read_csv(path, header=None)\n",
    "    data.columns = [\"age\",\n",
    "                    \"workclass\",\n",
    "                    \"fnlwgt\",\n",
    "                    \"education\",\n",
    "                    \"education-num\",\n",
    "                    \"marital-status\",\n",
    "                    \"occupation\",\n",
    "                    \"relationship\",\n",
    "                    \"race\", \"sex\",\n",
    "                    \"capital-gain\",\n",
    "                    \"capital-loss\",\n",
    "                    \"hours-per-week\",\n",
    "                    \"native-country\",\n",
    "                    \"result\"]\n",
    "    return data\n",
    "\n",
    "# 导入数据集\n",
    "train_data = read_adult_data()\n",
    "test_data = read_adult_data(\"data/adult.test\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "94f85f40-5cfa-4cfb-af4a-bd556161d293",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>fnlwgt</th>\n",
       "      <th>education</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>39</td>\n",
       "      <td>State-gov</td>\n",
       "      <td>77516</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>2174</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>50</td>\n",
       "      <td>Self-emp-not-inc</td>\n",
       "      <td>83311</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Exec-managerial</td>\n",
       "      <td>Husband</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>38</td>\n",
       "      <td>Private</td>\n",
       "      <td>215646</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Divorced</td>\n",
       "      <td>Handlers-cleaners</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>53</td>\n",
       "      <td>Private</td>\n",
       "      <td>234721</td>\n",
       "      <td>11th</td>\n",
       "      <td>7</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Handlers-cleaners</td>\n",
       "      <td>Husband</td>\n",
       "      <td>Black</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>28</td>\n",
       "      <td>Private</td>\n",
       "      <td>338409</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Prof-specialty</td>\n",
       "      <td>Wife</td>\n",
       "      <td>Black</td>\n",
       "      <td>Female</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>Cuba</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age          workclass  fnlwgt   education  education-num  \\\n",
       "0   39          State-gov   77516   Bachelors             13   \n",
       "1   50   Self-emp-not-inc   83311   Bachelors             13   \n",
       "2   38            Private  215646     HS-grad              9   \n",
       "3   53            Private  234721        11th              7   \n",
       "4   28            Private  338409   Bachelors             13   \n",
       "\n",
       "        marital-status          occupation    relationship    race      sex  \\\n",
       "0        Never-married        Adm-clerical   Not-in-family   White     Male   \n",
       "1   Married-civ-spouse     Exec-managerial         Husband   White     Male   \n",
       "2             Divorced   Handlers-cleaners   Not-in-family   White     Male   \n",
       "3   Married-civ-spouse   Handlers-cleaners         Husband   Black     Male   \n",
       "4   Married-civ-spouse      Prof-specialty            Wife   Black   Female   \n",
       "\n",
       "   capital-gain  capital-loss  hours-per-week  native-country  result  \n",
       "0          2174             0              40   United-States   <=50K  \n",
       "1             0             0              13   United-States   <=50K  \n",
       "2             0             0              40   United-States   <=50K  \n",
       "3             0             0              40   United-States   <=50K  \n",
       "4             0             0              40            Cuba   <=50K  "
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "3aea9f64-a4ab-4b55-8f87-beb1665cbd8a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>fnlwgt</th>\n",
       "      <th>education</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>25</td>\n",
       "      <td>Private</td>\n",
       "      <td>226802</td>\n",
       "      <td>11th</td>\n",
       "      <td>7</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Machine-op-inspct</td>\n",
       "      <td>Own-child</td>\n",
       "      <td>Black</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>38</td>\n",
       "      <td>Private</td>\n",
       "      <td>89814</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Farming-fishing</td>\n",
       "      <td>Husband</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>50</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>28</td>\n",
       "      <td>Local-gov</td>\n",
       "      <td>336951</td>\n",
       "      <td>Assoc-acdm</td>\n",
       "      <td>12</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Protective-serv</td>\n",
       "      <td>Husband</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&gt;50K.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>44</td>\n",
       "      <td>Private</td>\n",
       "      <td>160323</td>\n",
       "      <td>Some-college</td>\n",
       "      <td>10</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Machine-op-inspct</td>\n",
       "      <td>Husband</td>\n",
       "      <td>Black</td>\n",
       "      <td>Male</td>\n",
       "      <td>7688</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&gt;50K.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>18</td>\n",
       "      <td>?</td>\n",
       "      <td>103497</td>\n",
       "      <td>Some-college</td>\n",
       "      <td>10</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>?</td>\n",
       "      <td>Own-child</td>\n",
       "      <td>White</td>\n",
       "      <td>Female</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>30</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K.</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age   workclass  fnlwgt      education  education-num       marital-status  \\\n",
       "0   25     Private  226802           11th              7        Never-married   \n",
       "1   38     Private   89814        HS-grad              9   Married-civ-spouse   \n",
       "2   28   Local-gov  336951     Assoc-acdm             12   Married-civ-spouse   \n",
       "3   44     Private  160323   Some-college             10   Married-civ-spouse   \n",
       "4   18           ?  103497   Some-college             10        Never-married   \n",
       "\n",
       "           occupation relationship    race      sex  capital-gain  \\\n",
       "0   Machine-op-inspct    Own-child   Black     Male             0   \n",
       "1     Farming-fishing      Husband   White     Male             0   \n",
       "2     Protective-serv      Husband   White     Male             0   \n",
       "3   Machine-op-inspct      Husband   Black     Male          7688   \n",
       "4                   ?    Own-child   White   Female             0   \n",
       "\n",
       "   capital-loss  hours-per-week  native-country   result  \n",
       "0             0              40   United-States   <=50K.  \n",
       "1             0              50   United-States   <=50K.  \n",
       "2             0              40   United-States    >50K.  \n",
       "3             0              40   United-States    >50K.  \n",
       "4             0              30   United-States   <=50K.  "
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "fea71f94-cc4c-46c3-b93e-8035da16f220",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(32561, 15)"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.dropna(inplace=True)\n",
    "train_data.shape\n",
    "# 没有缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "2a9fbc17-14c8-4901-a05e-5263a95cd4d9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 字符类型的字段转数字类型\n",
    "def transform_str_to_Num(table, colNames):\n",
    "    for colName in colNames:\n",
    "        strs = table[colName].value_counts()\n",
    "        value_map = dict((v, i) for i, v in enumerate(strs.index))\n",
    "        table = table.replace({colName:value_map})\n",
    "    return table\n",
    "\n",
    "train_data = transform_str_to_Num(train_data, \n",
    "                            [\"workclass\", \n",
    "                             \"education\", \n",
    "                             \"marital-status\", \n",
    "                             \"occupation\", \n",
    "                             \"relationship\", \n",
    "                             \"race\", \n",
    "                             \"sex\", \n",
    "                             \"native-country\", \n",
    "                             \"result\"])\n",
    "test_data = transform_str_to_Num(test_data,\n",
    "                            [\"workclass\", \n",
    "                             \"education\", \n",
    "                             \"marital-status\", \n",
    "                             \"occupation\", \n",
    "                             \"relationship\", \n",
    "                             \"race\", \n",
    "                             \"sex\", \n",
    "                             \"native-country\", \n",
    "                             \"result\"]\n",
    "                                )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "b52c3e5a-34de-4e5d-a9d1-f2f84f99c046",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>fnlwgt</th>\n",
       "      <th>education</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>39</td>\n",
       "      <td>4</td>\n",
       "      <td>77516</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2174</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "      <td>83311</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>38</td>\n",
       "      <td>0</td>\n",
       "      <td>215646</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>234721</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>28</td>\n",
       "      <td>0</td>\n",
       "      <td>338409</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age  workclass  fnlwgt  education  education-num  marital-status  \\\n",
       "0   39          4   77516          2             13               1   \n",
       "1   50          1   83311          2             13               0   \n",
       "2   38          0  215646          0              9               2   \n",
       "3   53          0  234721          5              7               0   \n",
       "4   28          0  338409          2             13               0   \n",
       "\n",
       "   occupation  relationship  race  sex  capital-gain  capital-loss  \\\n",
       "0           3             1     0    0          2174             0   \n",
       "1           2             0     0    0             0             0   \n",
       "2           9             1     0    0             0             0   \n",
       "3           9             0     1    0             0             0   \n",
       "4           0             4     1    1             0             0   \n",
       "\n",
       "   hours-per-week  native-country  result  \n",
       "0              40               0       0  \n",
       "1              13               0       0  \n",
       "2              40               0       0  \n",
       "3              40               0       0  \n",
       "4              40               9       0  "
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "598972fd-c080-4fed-ae87-f20426941b02",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>fnlwgt</th>\n",
       "      <th>education</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>25</td>\n",
       "      <td>0</td>\n",
       "      <td>226802</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>38</td>\n",
       "      <td>0</td>\n",
       "      <td>89814</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>50</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>28</td>\n",
       "      <td>2</td>\n",
       "      <td>336951</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>44</td>\n",
       "      <td>0</td>\n",
       "      <td>160323</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7688</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>18</td>\n",
       "      <td>3</td>\n",
       "      <td>103497</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age  workclass  fnlwgt  education  education-num  marital-status  \\\n",
       "0   25          0  226802          5              7               1   \n",
       "1   38          0   89814          0              9               0   \n",
       "2   28          2  336951          6             12               0   \n",
       "3   44          0  160323          1             10               0   \n",
       "4   18          3  103497          1             10               1   \n",
       "\n",
       "   occupation  relationship  race  sex  capital-gain  capital-loss  \\\n",
       "0           6             2     1    0             0             0   \n",
       "1          11             0     0    0             0             0   \n",
       "2          12             0     0    0             0             0   \n",
       "3           6             0     1    0          7688             0   \n",
       "4           7             2     0    1             0             0   \n",
       "\n",
       "   hours-per-week  native-country  result  \n",
       "0              40               0       0  \n",
       "1              50               0       0  \n",
       "2              40               0       1  \n",
       "3              40               0       1  \n",
       "4              30               0       0  "
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "79fbcaae-1fce-4c7e-a2c3-3841d3e5ae91",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用sklearn的决策树分类器测试一下\n",
    "from sklearn.tree import DecisionTreeClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "f785bf55-d6f8-4d0b-b543-8f6c9e080ad2",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = DecisionTreeClassifier()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "048e777f-e063-45df-bab4-17e7d538da7f",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = train_data.drop([\"result\"], axis=1)\n",
    "X_test = test_data.drop([\"result\"], axis=1)\n",
    "Y_train = train_data[\"result\"]\n",
    "Y_test = test_data[\"result\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "869a0313-9ede-42f5-8395-20280046d32d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier()"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.fit(X_train, Y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "909ff253-6705-4db9-a786-4224a6382861",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8072599963147227"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.score(X_test, Y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "e0f7cda2-b4cb-4881-8633-54a42a49838f",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Node(object):\n",
    "    def __init__(self, x=None, label=None, y=None, data=None):\n",
    "        self.label = label   # label:子节点分类依据的特征\n",
    "        self.x = x           # x:特征\n",
    "        self.child = []      # child:子节点\n",
    "        self.y = y           # y:类标记（叶节点才有）\n",
    "        self.data = data     # data:包含数据（叶节点才有）\n",
    "\n",
    "    def append(self, node):  # 添加子节点\n",
    "        self.child.append(node)\n",
    "\n",
    "    def predict(self, features):  # 预测数据所述类\n",
    "        if self.y is not None:\n",
    "            return self.y\n",
    "        for c in self.child:\n",
    "            if c.x == features[self.label]:\n",
    "                return c.predict(features)\n",
    "\n",
    "\n",
    "def printnode(node, depth=0):  # 打印树所有节点\n",
    "    if node.label is None:\n",
    "        print(depth, (node.label, node.x, node.y, len(node.data)))\n",
    "    else:\n",
    "        print(depth, (node.label, node.x))\n",
    "        for c in node.child:\n",
    "            printnode(c, depth+1)\n",
    "\n",
    "\n",
    "class DTreeID3(object):\n",
    "    def __init__(self, epsilon=0, alpha=0):\n",
    "        # 信息增益阈值\n",
    "        self.epsilon = epsilon\n",
    "        self.alpha = alpha\n",
    "        self.tree = Node()\n",
    "\n",
    "    # 求概率\n",
    "    def prob(self, datasets):\n",
    "        datalen = len(datasets)\n",
    "        labelx = set(datasets)\n",
    "        p = {l: 0 for l in labelx}\n",
    "        for d in datasets:\n",
    "            p[d] += 1\n",
    "        for i in p.items():\n",
    "            p[i[0]] /= datalen\n",
    "        return p\n",
    "\n",
    "    # 求数据集的熵\n",
    "    def calc_ent(self, datasets):\n",
    "        p = self.prob(datasets)\n",
    "        value = list(p.values())\n",
    "        return -np.sum(np.multiply(value, np.log2(value)))\n",
    "\n",
    "    # 求条件熵\n",
    "    def cond_ent(self, datasets, col):\n",
    "        labelx = set(datasets.iloc[col])\n",
    "        p = {x: [] for x in labelx}\n",
    "        for i, d in enumerate(datasets.iloc[-1]):\n",
    "            p[datasets.iloc[col][i]].append(d)\n",
    "        return sum([self.prob(datasets.iloc[col])[k] * self.calc_ent(p[k]) for k in p.keys()])\n",
    "\n",
    "\n",
    "    # 求信息增益\n",
    "    def info_gain_train(self, datasets, datalabels):\n",
    "        datasets = datasets.T\n",
    "        ent = self.calc_ent(datasets.iloc[-1])\n",
    "        gainmax = {}\n",
    "        for i in range(len(datasets) - 1):\n",
    "            cond = self.cond_ent(datasets, i)\n",
    "            gainmax[ent - cond] = i\n",
    "        m = max(gainmax.keys())\n",
    "        return gainmax[m], m\n",
    "\n",
    "\n",
    "    def train(self, datasets, node):\n",
    "        labely = datasets.columns[-1]\n",
    "        # 判断样本是否为同一类输出Di，如果是则返回单节点树T。标记类别为Di\n",
    "        if len(datasets[labely].value_counts()) == 1:\n",
    "            node.data = datasets[labely]\n",
    "            node.y = datasets[labely][0]\n",
    "            return\n",
    "        # 判断特征是否为空，如果是则返回单节点树T，标记类别为样本中输出类别D实例数最多的类别\n",
    "        if len(datasets.columns[:-1]) == 0:\n",
    "            node.data = datasets[labely]\n",
    "            node.y = datasets[labely].value_counts().index[0]\n",
    "            return\n",
    "        # 计算A中的各个特征（一共n个）对输出D的信息增益，选择信息增益最大的特征Ag。\n",
    "        gainmaxi, gainmax = self.info_gain_train(datasets, datasets.columns)\n",
    "        # 如果Ag的信息增益小于阈值ε，则返回单节点树T，标记类别为样本中输出类别D实例数最多的类别。\n",
    "        if gainmax <= self.epsilon:\n",
    "            node.data = datasets[labely]\n",
    "            node.y = datasets[labely].value_counts().index[0]\n",
    "            return\n",
    "        # 按特征Ag的不同取值Agi将对应的样本输出D分成不同的类别Di。每个类别产生一个子节点。对应特征值为Agi。返回增加了节点的数T。\n",
    "        vc = datasets[datasets.columns[gainmaxi]].value_counts()\n",
    "        for Di in vc.index:\n",
    "            node.label = gainmaxi\n",
    "            child = Node(Di)\n",
    "            node.append(child)\n",
    "            new_datasets = pd.DataFrame([list(i) for i in datasets.values if i[gainmaxi]==Di], columns=datasets.columns)\n",
    "            self.train(new_datasets, child)\n",
    "\n",
    "    #训练数据\n",
    "    def fit(self, datasets):\n",
    "        self.train(datasets, self.tree)\n",
    "\n",
    "    # 找到所有节点\n",
    "    def findleaf(self, node, leaf):\n",
    "        for t in node.child:\n",
    "            if t.y is not None:\n",
    "                leaf.append(t.data)\n",
    "            else:\n",
    "                for c in node.child:\n",
    "                    self.findleaf(c, leaf)\n",
    "\n",
    "    def findfather(self, node, errormin):\n",
    "        if node.label is not None:\n",
    "            cy = [c.y for c in node.child]\n",
    "            if None not in cy:  # 全是叶节点\n",
    "                childdata = []\n",
    "                for c in node.child:\n",
    "                    for d in list(c.data):\n",
    "                        childdata.append(d)\n",
    "                childcounter = Counter(childdata)\n",
    "\n",
    "                old_child = node.child  # 剪枝前先拷贝一下\n",
    "                old_label = node.label\n",
    "                old_y = node.y\n",
    "                old_data = node.data\n",
    "\n",
    "                node.label = None  # 剪枝\n",
    "                node.y = childcounter.most_common(1)[0][0]\n",
    "                node.data = childdata\n",
    "\n",
    "                error = self.c_error()\n",
    "                if error <= errormin:  # 剪枝前后损失比较\n",
    "                    errormin = error\n",
    "                    return 1\n",
    "                else:\n",
    "                    node.child = old_child  # 剪枝效果不好，则复原\n",
    "                    node.label = old_label\n",
    "                    node.y = old_y\n",
    "                    node.data = old_data\n",
    "            else:\n",
    "                re = 0\n",
    "                i = 0\n",
    "                while i < len(node.child):\n",
    "                    if_re = self.findfather(node.child[i], errormin)  # 若剪过枝，则其父节点要重新检测\n",
    "                    if if_re == 1:\n",
    "                        re = 1\n",
    "                    elif if_re == 2:\n",
    "                        i -= 1\n",
    "                    i += 1\n",
    "                if re:\n",
    "                    return 2\n",
    "        return 0\n",
    "\n",
    "    def c_error(self):  # 求C(T)\n",
    "        leaf = []\n",
    "        self.findleaf(self.tree, leaf)\n",
    "        leafnum = [len(l) for l in leaf]\n",
    "        ent = [self.calc_ent(l) for l in leaf]\n",
    "        print(\"Ent:\", ent)\n",
    "        error = self.alpha*len(leafnum)\n",
    "        for l, e in zip(leafnum, ent):\n",
    "            error += l*e\n",
    "        print(\"C(T):\", error)\n",
    "        return error\n",
    "\n",
    "    def cut(self, alpha=0):  # 剪枝\n",
    "        if alpha:\n",
    "            self.alpha = alpha\n",
    "        errormin = self.c_error()\n",
    "        self.findfather(self.tree, errormin)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "id": "703c3106-4646-49c2-9877-7f97b46a812c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>fnlwgt</th>\n",
       "      <th>education</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "      <th>result</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>39</td>\n",
       "      <td>4</td>\n",
       "      <td>77516</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2174</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "      <td>83311</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>38</td>\n",
       "      <td>0</td>\n",
       "      <td>215646</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>234721</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>28</td>\n",
       "      <td>0</td>\n",
       "      <td>338409</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age  workclass  fnlwgt  education  education-num  marital-status  \\\n",
       "0   39          4   77516          2             13               1   \n",
       "1   50          1   83311          2             13               0   \n",
       "2   38          0  215646          0              9               2   \n",
       "3   53          0  234721          5              7               0   \n",
       "4   28          0  338409          2             13               0   \n",
       "\n",
       "   occupation  relationship  race  sex  capital-gain  capital-loss  \\\n",
       "0           3             1     0    0          2174             0   \n",
       "1           2             0     0    0             0             0   \n",
       "2           9             1     0    0             0             0   \n",
       "3           9             0     1    0             0             0   \n",
       "4           0             4     1    1             0             0   \n",
       "\n",
       "   hours-per-week  native-country  result  \n",
       "0              40               0       0  \n",
       "1              13               0       0  \n",
       "2              40               0       0  \n",
       "3              40               0       0  \n",
       "4              40               9       0  "
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "id": "5dfed66a-16c9-4e4a-8f99-f4cf7945ee8e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 这里只使用一些离散的特征训练\n",
    "# train_data = train_data.drop([\"age\",\"fnlwgt\",\"education-num\", \"capital-gain\", \"capital-loss\", \"hours-per-week\"], axis=1)\n",
    "X_test = X_test.drop([\"age\",\"fnlwgt\",\"education-num\", \"capital-gain\", \"capital-loss\", \"hours-per-week\"], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "3ac939c7-a298-4f05-975f-69b092ce3f8c",
   "metadata": {},
   "outputs": [],
   "source": [
    "dt = DTreeID3(epsilon=0)\n",
    "dt.fit(train_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "573881dc-f1f1-4e61-ab32-14f60ea00079",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 打印树 很长。。。。这里就省略了\n",
    "# printnode(dt.tree)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "id": "8f4a085a-24e4-4309-b673-4be7472ba7bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test = np.array(X_test).tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "id": "f1c9b6c8-b5ed-40be-ade6-c1c670149f06",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 预测\n",
    "Y = []\n",
    "for x in X_test:\n",
    "    Y.append(dt.tree.predict(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "id": "61a07a17-f7a6-4a44-8e21-2043ee1661b9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ACC: 0.7347828757447331\n"
     ]
    }
   ],
   "source": [
    "# 计算ACC\n",
    "errorCnt = 0\n",
    "for i in range(len(Y)):\n",
    "    if Y[i] != Y_test[i]:\n",
    "        errorCnt += 1\n",
    "\n",
    "print(\"ACC:\",  1- errorCnt / len(Y))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84fc2759-98a4-4838-b952-9a75e1e890a1",
   "metadata": {
    "tags": []
   },
   "source": [
    "### 参考资料\n",
    "\n",
    "[《机器学习Python实现_09_02_决策树_CART》 - 努力的番茄 - 博客园](https://www.cnblogs.com/zhulei227/p/12970172.html)\n",
    "\n",
    "[SmallVagetable/machine_learning_python: 通过阅读网上的资料代码，进行自我加工，努力实现常用的机器学习算法。实现算法有KNN、Kmeans、EM、Perceptron、决策树、逻辑回归、svm、adaboost、朴素贝叶斯](https://github.com/SmallVagetable/machine_learning_python)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
